/*************************************************************************
> File Name: map.cpp
> Author: hzy
> Created Time: 2023-08-19 10:01:07
> Description:
************************************************************************/
#include <iostream>
#include <map>

using namespace std;

void test_01()
{
    map<int, string> mymap;
    // 第一种 通过pair的方式插入对象
    mymap.insert(pair<int, string>(1, string("小王")));
    // 第二种 通过公用的方法创建
    mymap.insert(make_pair(2, "小黄"));
    // 第三种 通过map提供的对组的方法创建
    mymap.insert(map<int, string>::value_type(3, "猪猪"));
    // 第四种 直接通过键访问
    mymap[4] = "臭猪";

    for (map<int, string>::iterator it = mymap.begin(); it != mymap.end(); it++)
    {
        cout << it->first << "->" << (*it).second << endl;
    }
    // 如果map中有同名键值，插入失败
    mymap.insert(pair<int, string>(2, "鸹貔"));
    cout << "===========================" << endl;
    for (multimap<int, string>::iterator it = mymap.begin(); it != mymap.end(); ++it)
    {
        cout << it->first << "->" << (*it).second << endl;
    }
    cout << "===========================" << endl;

    // 在map中有同名键值，不再是插入键值为2的数据，而是修改键值为2的数据
    mymap[2] = "鸹貔";
    for (multimap<int, string>::iterator it = mymap.begin(); it != mymap.end(); ++it)
    {
        cout << it->first << "->" << (*it).second << endl;
    }
    cout << "===========================" << endl;
    cout << (*mymap.equal_range(2).first).first << "->" << (*mymap.equal_range(2).first).second << endl;

}

void test_02()
{
    multimap<int, string> mymap;
    // 第一种 通过pair的方式插入对象
    mymap.insert(pair<int, string>(1, string("小王")));
    // 第二种 通过公用的方法创建
    mymap.insert(make_pair(2, "小黄"));
    // 第三种 通过map提供的对组的方法创建
    mymap.insert(multimap<int, string>::value_type(3, "猪猪"));
    // 第四种 直接通过键访问
    //mymap[4] = "臭猪";

    for (multimap<int, string>::iterator it = mymap.begin(); it != mymap.end(); it++)
    {
        cout << it->first << "->" << (*it).second << endl;
    }
    // 如果map中有同名键值，插入失败
    mymap.insert(pair<int, string>(2, "鸹貔"));
    cout << "===========================" << endl;
    for (multimap<int, string>::iterator it = mymap.begin(); it != mymap.end(); ++it)
    {
        cout << it->first << "->" << (*it).second << endl;
    }
    cout << "===========================" << endl;

    // 在map中有同名键值，不再是插入键值为2的数据，而是修改键值为2的数据
    //mymap[2] = "鸹貔";
    for (multimap<int, string>::iterator it = mymap.begin(); it != mymap.end(); ++it)
    {
        cout << it->first << "->" << (*it).second << endl;
    }
    cout << "===========================" << endl;
    cout << (*mymap.equal_range(2).first).first << "->" << (*mymap.equal_range(2).first).second << endl;

}

int main()
{
    test_02();

    return 0;
}